package com.jzo2o.customer.service;

import com.jzo2o.api.customer.dto.response.AddressBookResDTO;
import com.jzo2o.common.model.PageResult;
import com.jzo2o.customer.model.domain.AddressBook;
import com.jzo2o.customer.model.dto.request.AddressBookPageQueryReqDTO;
import com.jzo2o.customer.model.dto.request.AddressBookUpsertReqDTO;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;

/**
 * <p>
 * 地址薄 服务类
 * </p>
 *
 * @author itcast
 * @since 2023-07-06
 */
public interface IAddressBookService extends IService<AddressBook> {

    /**
     * 根据用户id和城市编码获取地址
     *
     * @param userId 用户id
     * @param cityCode 城市编码
     * @return 地址编码
     */
    List<AddressBookResDTO> getByUserIdAndCity(Long userId, String cityCode);

    /**
     * 获取默认地址
     * @return
     */
    AddressBookResDTO getDefaultAddress();

    /**
     * 新增地址簿
     * @param addressBookUpsertReqDTO
     */
    void insertAddressBook(AddressBookUpsertReqDTO addressBookUpsertReqDTO);

    /**
     * 地址簿列表
     * @param reqDto
     * @return
     */
    PageResult<AddressBookResDTO> findByPage(AddressBookPageQueryReqDTO reqDto);

    /**
     * 根据ID地址簿查询详细信息
     * @param id
     * @return
     */
    AddressBookResDTO getAddressById(Long id);

    /**
     * 根据ID更新地址簿信息
     * @param reqDTO
     */
    void updateAddressById(AddressBookUpsertReqDTO reqDTO, Long id);

    /**
     * 批量删除或者是单独删除地址簿
     * @param ids
     */
    void deleteAddressByIds(List<Long> ids);

    /**
     * 改变默认状态
     * @param flag
     * @param id
     */
    void updateAddressDefault(Integer flag, Long id);
}
